﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Boa.AIT.AccesoDatos.Entidades.DTO;
using Didsoft.DataAccess.NHibernate;
using Didsoft.DataAccess.NHibernate.Extensions;
using Boa.AIT.AccesoDatos.Contratos;

namespace Boa.AIT.AccesoDatos.Contexto
{
    public class BOAPersonalAccesoDatos : DataAccessBase<DtoBOAPersonal>, IDtoBOAPersonal
    {

        public DtoBOAPersonal BuscarUsuario(string usuario, string contrasena)
        {
            string sql = @"select EmpleadoId = e.empleadoID, 
                                 EmpleadoNombre = e.Nombre1,
                                 EmpleadoApellidoPaterno = e.Apellido1,
                                 EmpleadoApellidoMaterno = e.Apellido2,
                                 ItemId = i.itemID,
                                 CargoId = c.CargoID,
                                 CargoNombre = c.Nombre,
                                 OrganigramaId = o.organigramaID,
                                 OrganigramaNombre = o.Nombre,
                                 NivelJerarquicoId = nj.nivelJerarquicoID,
                                 JerarquiaNombre = nj.Nombre,
                                 TipoContratoId = tc.tipoContratoID,
                                 TipoContratoNombre = tc.Nombre,
                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
                                 UsuarioNombre = ue.usuario,
                                 UsuarioPassword = ue.password,
                                 CiudadId = ofi.ciudadID,
                                 CiudadNombre = r.Nombre


                          from BOAPERSONAL.Personal.dbo.Empleado e
                          inner join BOAPERSONAL.Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
                          inner join BOAPERSONAL.Personal.dbo.Item i on hc.itemID = i.itemID
                          inner join BOAPERSONAL.Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
                          inner join BOAPERSONAL.Personal.dbo.Cargo c on c.CargoID = i.CargoID
                          inner join BOAPERSONAL.Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
                          inner join BOAPERSONAL.Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
                          left join BOAPERSONAL.Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
                          left join BOAPERSONAL.Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID and ofi.Estado = 1
                          left join AIT_Region r on r.RegionId = ofi.ciudadID 
                          where hc.Estado = 1 AND ue.Usuario = :usuario AND ue.password = :contrasena";
//            string sql = "select EmpleadoId = e.empleadoID, " +
//                                 "EmpleadoNombre = e.Nombre1, " +
//                                 @"EmpleadoApellidoPaterno = e.Apellido1,
//                                 EmpleadoApellidoMaterno = e.Apellido2,
//                                 ItemId = i.itemID,
//                                 CargoId = c.CargoID,
//                                 CargoNombre = c.Nombre,
//                                 OrganigramaId = o.organigramaID,
//                                 OrganigramaNombre = o.Nombre,
//                                 NivelJerarquicoId = nj.nivelJerarquicoID,
//                                 JerarquiaNombre = nj.Nombre,
//                                 TipoContratoId = tc.tipoContratoID,
//                                 TipoContratoNombre = tc.Nombre,
//                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
//                                 UsuarioNombre = ue.usuario,
//                                 UsuarioPassword = ue.password,
//                                 CiudadId = ofi.ciudadID,
//                                 CiudadNombre = r.Nombre
//                          from Personal.dbo.Empleado e
//                          inner join Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
//                          inner join Personal.dbo.Item i on hc.itemID = i.itemID
//                          inner join Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
//                          inner join Personal.dbo.Cargo c on c.CargoID = i.CargoID
//                          inner join Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
//                          inner join Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
//                          left join Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
//                          left join Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID and ofi.Estado = 1
//                          left join AIT_Region r on r.RegionId = ofi.ciudadID 
//                          where hc.Estado = 1 AND ue.Usuario = :usuario AND ue.password = :contrasena";

            var query = Session.CreateSQLQuery(sql);
            query.SetAnsiString("usuario", usuario);
            query.SetAnsiString("contrasena", contrasena);

            return query.ListBeanTransformer<DtoBOAPersonal>().FirstOrDefault();

        }

        public IList<DtoBOAPersonal> TodoPersonalBoa()
        {
            string sql = @"select EmpleadoId = e.empleadoID, 
                                 EmpleadoNombre = e.Nombre1,
                                 EmpleadoApellidoPaterno = e.Apellido1,
                                 EmpleadoApellidoMaterno = e.Apellido2,
                                 ItemId = i.itemID,
                                 CargoId = c.CargoID,
                                 CargoNombre = c.Nombre,
                                 OrganigramaId = o.organigramaID,
                                 OrganigramaNombre = o.Nombre,
                                 NivelJerarquicoId = nj.nivelJerarquicoID,
                                 JerarquiaNombre = nj.Nombre,
                                 TipoContratoId = tc.tipoContratoID,
                                 TipoContratoNombre = tc.Nombre,
                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
                                 UsuarioNombre = ue.usuario,
                                 UsuarioPassword = ue.password,
                                 CiudadId = ofi.ciudadID,
                                 CiudadNombre = r.Nombre


                          from Personal.dbo.Empleado e
                          inner join Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
                          inner join Personal.dbo.Item i on hc.itemID = i.itemID
                          inner join Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
                          inner join Personal.dbo.Cargo c on c.CargoID = i.CargoID
                          inner join Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
                          inner join Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
                          left join Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
                          left join Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID and ofi.Estado = 1
                          left join AIT_Region r on r.RegionId = ofi.ciudadID 
                          order by e.Apellido1,e.Apellido2,e.Nombre1";

            var query = Session.CreateSQLQuery(sql);


            return query.ListBeanTransformer<DtoBOAPersonal>();

        }



        public DtoBOAPersonal BuscarPorId(int PersonalSeleccionado)
        {
            string sql = @"select EmpleadoId = e.empleadoID, 
                                 EmpleadoNombre = e.Nombre1,
                                 EmpleadoApellidoPaterno = e.Apellido1,
                                 EmpleadoApellidoMaterno = e.Apellido2,
                                 ItemId = i.itemID,
                                 CargoId = c.CargoID,
                                 CargoNombre = c.Nombre,
                                 OrganigramaId = o.organigramaID,
                                 OrganigramaNombre = o.Nombre,
                                 NivelJerarquicoId = nj.nivelJerarquicoID,
                                 JerarquiaNombre = nj.Nombre,
                                 TipoContratoId = tc.tipoContratoID,
                                 TipoContratoNombre = tc.Nombre,
                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
                                 UsuarioNombre = ue.usuario,
                                 UsuarioPassword = ue.password,
                                 CiudadId = ofi.ciudadID,
                                 CiudadNombre = r.Nombre


                          from Personal.dbo.Empleado e
                          inner join Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
                          inner join Personal.dbo.Item i on hc.itemID = i.itemID
                          inner join Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
                          inner join Personal.dbo.Cargo c on c.CargoID = i.CargoID
                          inner join Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
                          inner join Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
                          left join Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
                          left join Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID and ofi.Estado = 1
                          left join AIT_Region r on r.RegionId = ofi.ciudadID 
                          where e.EmpleadoId = :PersonalSeleccionado";

            var query = Session.CreateSQLQuery(sql);
            query.SetInt32("PersonalSeleccionado", PersonalSeleccionado);
            return query.ListBeanTransformer<DtoBOAPersonal>().FirstOrDefault();
        }
    }
}
